package springboot.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springboot.intercepter.JwtValidateInterceptor;

/**
 * @author daiqiang
 * @since 2024/5/24-16:38
 * 该函数用于向Spring MVC框架注册一个拦截器jwtValidateInterceptor，并配置拦截的路径和排除的路径。
 * registry.addInterceptor(jwtValidateInterceptor)将jwtValidateInterceptor添加到拦截器列表中。
 * registration.addPathPatterns("/**")表示拦截所有路径。
 * registration.excludePathPatterns()用于设置不需要拦截的路径，即排除路径。在代码中，排除了/user/login、/user/info、/user/logout、/homeNumber、/homeNumber/?和/homeNumber/list这几个路径。
 * 总结：该函数的作用是注册一个拦截器，并配置拦截所有路径，但排除了一些特定的路径。
 */
@Configuration
public class MyInterceptorConfig  implements WebMvcConfigurer {
    @Autowired
    private JwtValidateInterceptor jwtValidateInterceptor;


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration registration=registry.addInterceptor(jwtValidateInterceptor);
        registration.addPathPatterns("/**").excludePathPatterns(
                "/user/login",
                "/user/info",
                "/user/logout",
                "/user",
                "/user/*",
                "/*",
                "/user/*/*",
                "/user/?",
                "/homeNumber",
                "/homeNumber/*",  // 匹配/homeNumber/后跟任何内容
                "/homeNumber/*/*", // 如果ID可能包含路径分隔符，例如/homeNumber/12
                "/homeNumber/?",
                "/homeNumber/list",   //未添加路径，前端报错：Network Error
                "/error",
                "/swagger-ui/**",
                "/swagger-resources/**",
                "/v3/**",
                "/css/**", "/js/**","/pages/**", "/images/**", // 排除静态资源
                "/role/*",  // 匹配/homeNumber/后跟任何内容
                "/role/list",   //未添加路径，前端报错：Network Error
                "/user/list",   //未添加路径，前端报错：Network Error
                "/personalDiaries/*",  // 匹配/homeNumber/后跟任何内容
                "/personalDiaries/list",   //未添加路径，前端报错：Network Error
                "/personalDiaries/*/*", // 如果ID可能包含路径分隔符，例如/homeNumber/12
                "/role/?",
                "/file/*",  // 匹配/homeNumber/后跟任何内容
                "/file/upload",  // 匹配/homeNumber/后跟任何内容
                "/file/download",  // 匹配/homeNumber/后跟任何内容
                "/file/download/*",  // 匹配/homeNumber/后跟任何内容
                "/role/*/*", // 如果ID可能包含路径分隔符，例如/homeNumber/12
                "/contracts/*" // 如果ID可能包含路径分隔符，例如/homeNumber/12
        );
    }
}
